home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
051-075
/
scopedisk53
/
klondike20
/
klondike
< prev
next >
Wrap
Text File
|
1995-03-18
|
16KB
|
600 lines
CLEAR,32000&
DEFINT a-z
WINDOW 1,,(417,11)-(617,59),31,-1
at&=0:text&=0:printat&=0:shadow&=0:sxy&=0:scolr&=0:sbox&=0:dbox&=0
drawmode&=0:title&=0:loadfont&=0:usefont&=0:killfont&=0:style&=0
refresh&=0:iffload&=0:iffsave&=0:loadRGB&=0:saveRGB&=0:request&=0
checkfile&=0:bload&=0:bsave&=0:bopenr&=0:bopenw&=0:bread&=0:bwrite&=0
seek&=0:bclose&=0:getmem&=0:freemem&=0:zero&=0:copy&=0:w7&=0:bye&=0
filesize&=0:blowup&=0
nl$=CHR$(0):DIM rgb(32,1):win$="*** YOU WIN !!! ***"+nl$
DIM hidden(8,5),down(8),showing(8,12),up(8),deck(51),p(12),f(4),out(4)
DIM card(566,4),tx$(13),timbre(255),colr(2),talon(23),fback(3152)
DIM ml(99)
OPEN "ml_loader" FOR INPUT AS #1
FOR i=0 TO 99:ml(i)=CVI(INPUT$(2,1)):NEXT
CLOSE #1
ml&=VARPTR(ml(0)):ml& SADD("jlib"+nl$),VARPTR(at&),WINDOW(7)
ERASE ml
WINDOW CLOSE 1
SCREEN 1,640,200,3,2
WINDOW 2,,,0,1
w7& WINDOW(7):sxy& 2,1
POKE WINDOW(7)+99,0:refresh&
FOR i=1 TO 4:MENU i,0,0,"":NEXT
bopenr& SADD("kdata"+nl$)
bread& VARPTR(rgb(0,0)),64
loadRGB& VARPTR(rgb(0,0)),32
FOR a=0 TO 98 STEP 2:LINE (2*a,a)-(631-2*a,195-a),1,b:NEXT
FOR a=98 TO 50 STEP -1:LINE (2*a,a)-(631-2*a,195-a),2,b:NEXT
FOR a=35 TO 98 STEP 2:LINE (a+70,2*a+1)-(561-a,194-2*a),1,b:NEXT
FOR a=98 TO 35 STEP -1:LINE (a+70,2*a+1)-(561-a,194-2*a),2,b:NEXT
scolr& 1,7
shadow& -1,68,SADD("****** KLONDIKE ******"+nl$)
shadow& -1,108,SADD("Revisions, additions and enhancements"+nl$)
shadow& -1,118,SADD("in AmigaBASIC by john everett"+nl$)
scolr& 1,3
shadow& -1,83,SADD("Original ABasic version"+nl$)
shadow& -1,93,SADD("by David Addison"+nl$)
bread& VARPTR(timbre(0)),512:WAVE 0,timbre:WAVE 1,timbre
bread& VARPTR(timbre(0)),512:WAVE 2,timbre:WAVE 3,timbre
getmem& VARPTR(blowup&),200,65537&
bread& blowup&,200
bclose&
CHDIR "cards"
skipflag=-1:GOSUB amideck:skipflag=0
money=0:c$="A23456789TJQK"
FOR i=1 TO 13:READ tx$(i):NEXT
DATA "N ACE"," TWO"," THREE"," FOUR"," FIVE"," SIX"," SEVEN"
DATA "N EIGHT"," NINE"," TEN"," JACK"," QUEEN"," KING"
checkfile& SADD("blowup"+nl$),VARPTR(filesize&)
IF filesize&>0 THEN
blowup&=0
getmem& VARPTR(blowup&),filesize&,65537&
bload& SADD("blowup"+nl$),blowup&,filesize&
END IF
start:
CLS:ding
zero& VARPTR(talon(0)),24
zero& VARPTR(f(0)),5
zero& VARPTR(out(0)),5
zero& VARPTR(hidden(0,0)),54
zero& VARPTR(showing(0,0)),117
card=0
FOR i=1 TO 4
FOR j=1 TO 13
deck(card)=100*i+j
card=card+1
NEXT
NEXT
FOR j=1 TO 3
RANDOMIZE TIMER
FOR i=51 TO 0 STEP -1
x=INT(RND*i)+1
SWAP deck(x),deck(i)
NEXT
NEXT
card=0
money=money-52
FOR i=1 TO 6
FOR j=0 TO i-1
hidden(i+2,j)=deck(card)
card=card+1
NEXT
NEXT
FOR i=0 TO 6
showing(i+2,0)=deck(card)
down(i+2)=i
card=card+1
NEXT
FOR i=2 TO 8:up(i)=1:NEXT
up(0)=0
LINE (11,136)-STEP(59,12),1,bf
LINE (13,137)-STEP(55,10),0,bf
LINE (15,138)-STEP(51,8),1,bf
GOSUB prtmoney
PUT (10,150),card(0,0),PSET
SOUND 70,.25,255,2
FOR i=10 TO 151 STEP 47:LINE (79,i)-STEP(59,44),1,b:NEXT
FOR i=1 TO 7
xx=69*i+79
yy=8*i+1
GOSUB dealcard
num=showing(i+1,0)
GOSUB whichcard
playcard xx,yy
FOR j=i+1 TO 7
xx=69*j+79
GOSUB dealcard
PUT (xx,yy),card(0,0),PSET
SOUND 70,.25,255,2
NEXT
NEXT
sbox& 150,184,7,SADD("MENU"+nl$)
GOSUB flipcard
column=0:holding=0:fdation=0
checkmouse:
WHILE MOUSE(0)<>0:WEND
IF holding THEN GOSUB playit ELSE WHILE MOUSE(0)=0:SLEEP:WEND
xpos=MOUSE(3):ypos=MOUSE(4)
IF ypos>184 AND xpos>150 AND xpos<190 THEN fastmenu
column=INT((xpos-6)/69)
IF column>-1 AND column<>1 AND column<9 THEN
IF holding THEN
GOSUB 410
ELSEIF column=0 AND ypos>149 THEN
GOSUB flipcard
ELSE
GOSUB pickupcard
END IF
END IF
GOTO checkmouse
whichcard:
suit=INT(num/100)
value=num-100*suit
RETURN
flipcard:
IF holding THEN CALL oops(1):RETURN
IF card>51 THEN CALL oops(2):RETURN
talon(up(0))=deck(card)
card=card+1
IF card>51 THEN
FOR i=194 TO 150 STEP -4
LINE (10,i)-STEP(61,3),0,bf
NEXT
END IF
num=talon(up(0))
GOSUB whichcard
playcard 10,4*up(0)+9
up(0)=up(0)+1
RETURN
playit:
drawmode& 2
LINE (xpos-30,ypos)-STEP(61,44),,b
x=xpos:y=ypos
WHILE MOUSE(0)=0
xpos=MOUSE(1):ypos=MOUSE(2)
IF xpos<>x OR ypos<>y THEN
LINE (x-30,y)-STEP(61,44),,b
LINE (xpos-30,ypos)-STEP(61,44),,b
x=xpos:y=ypos
END IF
WEND
LINE (x-30,y)-STEP(61,44),,b
drawmode& 0
RETURN
410 :
IF NOT holding THEN CALL oops(3):RETURN
IF column=0 THEN
IF fromcolumn<>0 THEN CALL oops(7):RETURN
num=talon(up(0)-1)
GOSUB whichcard
playcard 69*column+10,4*(up(0))+5
holding=0
RETURN
END IF
IF fromcolumn=column THEN
FOR i=0 TO up(column)-1
num=showing(column,i)
GOSUB whichcard
playcard 69*column+10,8*(i+down(column))+9
NEXT
holding=0
RETURN
END IF
IF up(column)=0 THEN
IF fromcolumn=0 THEN num=talon(up(0)-1) ELSE num=showing(fromcolumn,0)
GOSUB whichcard
IF value<>13 THEN CALL oops(8):RETURN
ELSE
num=showing(column,up(column)-1)
GOSUB whichcard
tempsuit=suit
tempvalue=value
IF fromcolumn=0 THEN num=talon(up(0)-1) ELSE num=showing(fromcolumn,0)
GOSUB whichcard
IF tempsuit<3 AND suit<3 THEN CALL oops(4):RETURN
IF tempsuit>2 AND suit>2 THEN CALL oops(5):RETURN
IF tempvalue<>value+1 THEN CALL oops(6):RETURN
END IF
IF fromcolumn=0 THEN
showing(column,up(column))=num
up(column)=up(column)+1
playcard 69*column+10,8*(up(column)+down(column))+1
up(0)=up(0)-1
talon(up(0))=0
holding=0
RETURN
END IF
FOR i=0 TO up(fromcolumn)-1
num=showing(fromcolumn,i)
showing(column,up(column))=num
GOSUB whichcard
up(column)=up(column)+1
playcard 69*column+10,8*(up(column)+down(column))+1
showing(fromcolumn,i)=0
NEXT
up(fromcolumn)=0
holding=0
IF hidden(fromcolumn,0)=0 THEN RETURN
num=hidden(fromcolumn,0)
GOSUB whichcard
playcard 69*fromcolumn+10,8*down(fromcolumn)+1
showing(fromcolumn,up(fromcolumn))=num
up(fromcolumn)=1
FOR i=0 TO 4
hidden(fromcolumn,i)=hidden(fromcolumn,i+1)
NEXT
hidden(fromcolumn,5)=0
down(fromcolumn)=down(fromcolumn)-1
IF down(fromcolumn)<0 THEN down(fromcolumn)=0
RETURN
pickupcard:
IF up(column)=0 THEN CALL oops(9):RETURN
IF column=0 THEN
temp=4*up(0)+9
ELSE
temp=8*(up(column)+down(column))+7
END IF
IF ypos>temp AND ypos<temp+44 THEN
GOSUB 930
IF fdation THEN
FOR i=1 TO 4
IF out(i)<13 THEN fdation=0
NEXT
IF fdation=0 THEN RETURN
FOR i=0 TO 31
COLOR i AND 7
printat& 200+i,3*i,SADD(win$)
printat& 200+i,192-3*i,SADD(win$)
printat& 462-i,3*i,SADD(win$)
printat& 462-i,192-3*i,SADD(win$)
NEXT
FOR temp=0 TO 6
COLOR 7-temp:SOUND 200*temp+500,20,255,0:SOUND 250*temp+625,20,255,1
printat& 200+i,3*i,SADD(win$):printat& 462-i,3*i,SADD(win$)
pause 1!
NEXT
GOTO fastmenu
END IF
END IF
fromcolumn=column
holding=-1
erasecard column,down(column)+up(column),down(column)
IF column=0 THEN
num=talon(up(0)-1)
IF up(0)-1>0 THEN
num=talon(up(0)-2)
GOSUB whichcard
playcard 10,4*(up(0))+1
END IF
RETURN
END IF
putback:
IF hidden(column,0)>0 THEN
PUT (69*column+10,8*down(column)+1),card(0,0),PSET
FOR i=3 TO 0 STEP -1
SOUND (i+1)*1000,1,255,0
SOUND (i+1)*1000,1,255,1
NEXT
END IF
RETURN
930 :
IF column=0 THEN num=talon(up(0)-1) ELSE num=showing(column,up(column)-1)
GOSUB whichcard
IF out(suit)<>value-1 THEN
IF out(suit)<>0 THEN tempvalue=out(suit)
RETURN
END IF
erasecard column,up(column)+down(column),up(column)+down(column)-1
playcard 79,47*suit-38
out(suit)=value
fdation=-1
money=money+5:GOSUB prtmoney
up(column)=up(column)-1
IF column=0 THEN
talon(up(0))=0
IF up(0)>0 THEN
num=talon(up(0)-1)
GOSUB whichcard
playcard 10,4*(up(0))+5
END IF
RETURN
END IF
showing(column,up(column))=0
IF up(column)=0 THEN
IF hidden(column,0)>0 THEN GOSUB putback
showing(column,0)=hidden(column,0)
IF hidden(column,0)=0 THEN RETURN
num=showing(column,0)
GOSUB whichcard
playcard 69*column+10,8*down(column)+1
FOR i=0 TO 4
hidden(column,i)=hidden(column,i+1)
NEXT
hidden(column,5)=0
up(column)=1
down(column)=down(column)-1:IF down(column)<0 THEN down(column)=0
ELSE
num=showing(column,up(column)-1)
GOSUB whichcard
playcard 69*column+10,8*(up(column)+down(column))+1
END IF
RETURN
prtmoney:
drawmode& 1
COLOR 3+(money>0),1
printat& 17,139,SADD("$"+nl$)
PRINT USING "#####";money
COLOR ,0
drawmode& 0
RETURN
dealcard:
drawmode& 2
ystep=139-yy
xstep=xx/10
ystep=INT(ystep/xstep)+2
y=139
FOR x=5 TO xx STEP 20
y=y-ystep
LINE (x,y)-STEP(59,43),4,b
LINE (x,y)-STEP(59,43),4,b
NEXT
drawmode& 0
RETURN
fastmenu:
fx=150:fy=126
GET (fx,fy)-(fx+115,fy+69),fback
LINE (fx,fy)-STEP(115,69),1,bf
LINE (fx+2,fy+1)-STEP(111,67),0,bf
LINE (fx+4,fy+2)-STEP(107,65),1,bf
sbox& fx+6,fy+3,7, SADD(" RETURN "+nl$)
sbox& fx+6,fy+16,7,SADD(" NEW GAME "+nl$)
sbox& fx+6,fy+29,7,SADD(" CARD STUFF "+nl$)
sbox& fx+6,fy+42,7,SADD("INSTRUCTIONS"+nl$)
sbox& fx+6,fy+55,7,SADD(" QUIT "+nl$)
floop:
CALL whoa:x=MOUSE(3):y=MOUSE(4)
IF x<fx+6 OR x>fx+108 OR y<fy+3 OR y>y+68 THEN floop
fm=INT((y-fy-3)/13)
PUT (fx,fy),fback,PSET
ON fm GOTO start,design,help,quit
GOTO checkmouse
design:
CLS:ding
temp&=PEEKL(PEEKL(PEEKL(WINDOW(7)+46)+48)+4)
copy& temp&,VARPTR(rgb(0,1)),32
skipflag=0
LINE (2,4)-STEP(251,187),1,bf
LINE (4,5)-STEP(247,185),0,bf
LINE (262,60)-STEP(139,129),1,bf
LINE (264,61)-STEP(135,127),0,bf
LINE (266,62)-STEP(131,125),1,bf
COLOR 2:drawmode& 0:printat& 272,63,SADD("ClickClickClick"+nl$):COLOR 1
RESTORE design
FOR i=0 TO 8:READ msg$:sbox& 268,13*i+71,7,SADD(msg$+nl$):NEXT
DATA "RETURN To Game","SAVE This Deck","LOAD A New Deck"
DATA "LOAD Amiga Deck","D. Addison Deck","UNDO My Changes"
DATA " Palette UNDO "," Palette RESET "," QUIT Program "
LINE (410,60)-STEP(218,129),1,bf
LINE (412,61)-STEP(214,127),0,bf
FOR i=0 TO 2
LINE (71*i+415,62)-STEP(66,79),1,bf
LINE (71*i+417,63)-STEP(62,77),0,bf
NEXT
FOR i=0 TO 7:LINE (26*i+416,153)-STEP(23,32),i,bf:NEXT
LINE (26*colr+415,151)-STEP(25,36),1,b
GOSUB designer
drawloop:
whoa
x=MOUSE(3):y=MOUSE(4):GOSUB checkbutton:IF skipflag THEN start
IF x>416 AND x<624 AND y>63 AND y<140 THEN
x=INT((x-416)/71)
WHILE MOUSE(0)<0
colr(x)=15-(INT((MOUSE(2)-63)/5) AND 15)
PALETTE colr,colr(0)/16,colr(1)/16,colr(2)/16:GOSUB showit
WEND
ELSEIF x>416 AND x<624 AND y>153 AND y<188 THEN
WHILE MOUSE(0)<0
LINE (26*colr+415,151)-STEP(25,36),0,b
colr=INT((MOUSE(1)-416)/26) AND 7
LINE (26*colr+415,151)-STEP(25,36),1,b
WEND:GOSUB getrgb
ELSEIF x>6 AND x<252 AND y>6 AND y<190 THEN
WHILE MOUSE(0)<0
x=INT((MOUSE(1)-6)/4)
IF x<0 THEN x=0
IF x>60 THEN x=60
y=INT((MOUSE(2)-6)/4)
IF y<0 THEN y=0
IF y>45 THEN y=45
LINE (4*x+6,4*y+6)-STEP(3,3),colr,bf
PSET (75*card+x+264,y+8),colr
WEND
ELSEIF x>260 AND x<624 AND y>6 AND y<55 THEN
card=INT((x-260)/75):GOSUB newcard
END IF
GOTO drawloop
checkbutton:
IF x>268 AND x<396 AND y>71 AND y<188 THEN
y=INT((y-71)/13):ding
ON y+1 GOTO keep,savem,loadem,amideck,dadeck,undoall,undocolr,resetcolr,quit
END IF
RETURN
keep:skipflag=-1:RETURN
savem:
GOSUB newscreen
greet$="SAVE under what name?"+nl$:file$=STRING$(360,0)
request& 0,30,SADD(greet$),SADD(file$),1
GOSUB byescreen
file$=LEFT$(file$,INSTR(file$,nl$)-1)
IF file$="" OR file$="AMIGA" OR file$="ADDISON" THEN RETURN
FOR i=0 TO 4:GET (75*i+264,8)-(75*i+264+61,9+45),card(0,i):NEXT
copy& temp&,VARPTR(rgb(0,0)),32
bopenw& SADD(file$+nl$)
bwrite& VARPTR(rgb(0,0)),64
bwrite& VARPTR(card(0,0)),5660
bclose&
RETURN
loadem:
GOSUB newscreen
greet$="Please tell me what to LOAD..."+nl$:file$=STRING$(360,0)
request& 0,30,SADD(greet$),SADD(file$),0
GOSUB byescreen
file$=LEFT$(file$,INSTR(file$,nl$))
IF LEFT$(file$,1)=nl$ THEN RETURN
bopenr& SADD(file$)
bread& VARPTR(rgb(0,0)),64
bread& VARPTR(card(0,0)),5660
bclose&
loadRGB& VARPTR(rgb(0,0)),32
GOTO designer
amideck:
bopenr& SADD("AMIGA"+nl$)
bread& VARPTR(rgb(0,0)),64
bread& VARPTR(card(0,0)),5660
bclose&
loadRGB& VARPTR(rgb(0,0)),32
IF NOT skipflag THEN designer
RETURN
dadeck:
bopenr& SADD("ADDISON"+nl$)
bread& VARPTR(rgb(0,0)),64
bread& VARPTR(card(0,0)),5660
bclose&
loadRGB& VARPTR(rgb(0,0)),32
GOTO designer
undoall:loadRGB& VARPTR(rgb(0,0)),32:GOSUB designer:RETURN
undocolr:loadRGB& VARPTR(rgb(0,1)),32:GOSUB getrgb:RETURN
resetcolr:loadRGB& VARPTR(rgb(0,0)),32:GOSUB getrgb:RETURN
designer:
FOR card=0 TO 4
LINE (75*card+260,6)-STEP(68,49),1,bf
LINE (75*card+262,7)-STEP(64,47),0,bf
PUT(75*card+264,8),card(0,card),PSET
NEXT:card=0
GOSUB getrgb
newcard:
blowup& WINDOW(7),75*card+264,8,6,6
COLOR 1:drawmode& 1
RETURN
getrgb:
msg$=RIGHT$("00"+HEX$(PEEKW(temp&+2*colr)),3)
FOR x=0 TO 2:colr(x)=VAL("&h"+MID$(msg$,x+1,1)):GOSUB showit:NEXT
RETURN
showit:
LINE (71*x+419,139)-STEP(58,-5*colr(x)),colr-(colr=0),bf
LINE -(71*x+419,64),0,bf
printat& 71*x+445,143,SADD(HEX$(colr(x))+nl$)
RETURN
help:
GOSUB newscreen
RESTORE help
scolr& 1,2
FOR i=1 TO 10:READ y,msg$:shadow& -1,y,SADD(msg$+nl$):NEXT
DATA 20,"Click directly on card",30,"to put on Foundation"
DATA 50,"Click above or below card",60,"to pick it up"
DATA 80,"If card can't be played on Foundation",90,"the cards will be picked up"
DATA 110,"Click on back of card",120,"in lower left corner of screen"
DATA 130,"to draw from deck",150,"Click Mouse"
scolr& 1,3
whoa
GOSUB byescreen
GOTO checkmouse
newscreen:
SCREEN 2,320,200,2,1:WINDOW 3," ",,0,2
w7& WINDOW(7):POKE WINDOW(7)+99,0:refresh&
loadRGB& VARPTR(rgb(0,0)),32
RETURN
byescreen:WINDOW CLOSE 3:SCREEN CLOSE 2:w7& WINDOW(7):RETURN
slowquit:ding:whoa
quit:
ding
WINDOW CLOSE 2
SCREEN CLOSE 1
WINDOW 1
MENU RESET
CHDIR "/"
IF blowup&>0 THEN CALL freemem&(blowup&)
IF bye&>0 THEN CALL bye&
CLEAR,25000
SYSTEM
END
SUB whoa STATIC
WHILE MOUSE(0)<>0:WEND
WHILE MOUSE(0)=0:SLEEP:WEND
END SUB
SUB pause(delay!) STATIC
delay!=delay!+TIMER
WHILE TIMER<delay!:WEND
END SUB
SUB ding STATIC
SOUND 400,1,255,0
SOUND 500,1,255,1
SOUND 600,1,255,2
SOUND 800,1,255,3
END SUB
SUB oops(which) STATIC
SHARED tx$(),value,tempvalue,shadow&,nl$
ON which GOSUB e1,e2,e3,e4,e5,e6,e7,e8,e9
shadow& 315-4*LEN(a$),0,SADD(a$+nl$)
FOR which=1 TO 4:SOUND 2000,2,255,2:SOUND 4000,1,255,3:pause .4:NEXT
LINE (0,0)-(630,9),0,bf
EXIT SUB
e1: a$="YOU'VE ALREADY PICKED UP A CARD":RETURN
e2: a$="THERE ARE NO MORE CARDS IN THE DECK!":RETURN
e3: a$="YOU DO NOT HAVE ANY CARDS TO PLAY":RETURN
e4: a$="YOU CAN'T PLAY BLACK ON BLACK":RETURN
e5: a$="YOU CAN'T PLAY RED ON RED":RETURN
e6: a$="YOU CAN'T PLAY A"+tx$(value)+" ON A"+tx$(tempvalue):RETURN
e7: a$="YOU CAN'T PLAY CARDS HERE":RETURN
e8: a$="YOU CAN ONLY PLAY A KING HERE":RETURN
e9: a$="THERE ARE NO CARDS HERE TO PICK UP":RETURN
END SUB
SUB playcard(x,y) STATIC
SHARED card(),suit,value,c$,printat&,nl$
SOUND 100,.35,255,2
SOUND 70,.25,255,3
PUT (x,y),card(0,suit),PSET
COLOR 2-(suit>2)
printat& x+2,y+2,SADD(MID$(c$,value,1)+nl$)
printat& x+51,y+38,SADD(MID$(c$,value,1)+nl$)
END SUB
SUB erasecard(column,start,finish) STATIC
IF column=0 THEN
FOR i=4*start+47 TO 4*start+3 STEP -4
LINE (10,i)-STEP(61,3),0,bf
NEXT
ELSE
FOR i=8*start+43 TO 8*finish+7 STEP -4
LINE (69*column+10,i)-STEP(61,3),0,bf
NEXT
END IF
END SUB